Many web sites are accessed by hundreds of thousands of users on a daily basis. To support such a large volume of access, many web sites typically are hosted on a large number of web servers. Each web server has the software and data needed to respond to each access. When a web site receives an access request, the request is distributed to one of the web servers for servicing. Various load-balancing techniques are used to help ensure that requests are serviced in a timely manner by a web server.
It is important that each web server has the same software and data so each request can be serviced in a uniform manner. For example, if users can purchase products through a web site, then each web server for that site would have access to a catalog of the available products that includes product descriptions and pricing information. Each web server may have access to its own copy of the catalog or a copy shared with some of the other web servers. If each copy of the catalog was not the same, then a user might receive different pricing information depending on the web server to which their request happens to be distributed. To prevent such undesirable inconsistencies, all copies of catalogs typically are updated at the same time and, because catalogs can be very large, they generally are updated only on a periodic basis. For example, the pricing information of a catalog may be updated once a day at the same time for each copy.
When the data on a web server is updated only periodically, there may be times when the data on the web server may not be what the web site operator wants because of the delay inherent in making only periodic updates. For example, if the pricing information for a catalog is only updated once a day, then the price of a given product cannot be changed more frequently to address market conditions. Thus, if a competitor of a web site lowers the price of a product just after the pricing information for that product has been updated in the catalog, the web site would need to wait 24 hours before lowering its price in response to the competitor's lower price.
Some data used by a web site changes so frequently that each web server cannot rely on its own copy of infrequently updated data. For example, the inventory for many products can change very rapidly as orders are placed and additional inventory is received. Typically, such data is stored at a central location (e.g., a database server) that is accessed by each web server as needed. The storage of such data at a central location, however, creates the possibility of a bottleneck that may slow the responsiveness of a web site as access to it increases. In addition, as access to a given web site increases, it might be prohibitively costly to increase the capacity of the web site to support additional web servers in part because the storage of data only at a central location is not particularly scalable.
It would be desirable to have a technique that would allow for each web server to have access to a local copy of the data to avoid bottlenecks, to have such data updated on a real-time basis, and to ensure that each copy of the data is relatively consistent.